#coding:utf-8
#リスト要素の削除clear, pop, remove, del


#すべての要素を削除: clear()
l = [0, 1, 2]

l.clear()
print(l)
# []


#指定した位置の要素を削除し、値を取得: pop()
l = [0, 10, 20, 30, 40, 50]

popped_item = l.pop(0)
print(popped_item)
# 0

print(l)
# [10, 20, 30, 40, 50]

popped_item = l.pop(3)
print(popped_item)
# 40

print(l)
# [10, 20, 30, 50]

popped_item = l.pop(-2)
print(popped_item)
# 30

print(l)
# [10, 20, 50]
popped_item = l.pop()
print(popped_item)
# 50

print(l)
# [10, 20]



#指定した値と同じ要素を検索し、最初の要素を削除: remove()
l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

#インデックス・スライスで位置・範囲を指定して削除: del
l = [0, 10, 20, 30, 40, 50]

del l[0]
print(l)
# [10, 20, 30, 40, 50]

del l[3]
print(l)
# [10, 20, 30, 50]

del l[-1]
print(l)
# [10, 20, 30]

del l[-2]
print(l)
# [10, 30]

#スライスで範囲を指定すると、複数の要素を一括で削除できる。
l = [0, 10, 20, 30, 40, 50]
del l[2:5]
print(l)
# [0, 10, 50]

l = [0, 10, 20, 30, 40, 50]
del l[:3]
print(l)
# [30, 40, 50]

l = [0, 10, 20, 30, 40, 50]
del l[-2:]
print(l)
# [0, 10, 20, 30]

#全範囲を指定してすべての要素を削除する
l = [0, 10, 20, 30, 40, 50]
del l[:]
print(l)
# []

#スライスでの範囲指定を[start:stop:step]として増分stepを指定すると、飛び飛びの複数の要素を一括で削除できる。
l = [0, 10, 20, 30, 40, 50]
del l[::2]
print(l)
# [10, 30, 50]

#条件を満たす複数の要素を一括で削除: リスト内包表記
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

evens = [i for i in l if i % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8]

odds = [i for i in l if i % 2 != 0]
print(odds)
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

print(list(set(l)))
# ['Alice', 'Charlie', 'David', 'Bob']